ngl: Improve shortcuts for shadow nodes
authorMatthias Clasen <mclasen@redhat.com>
Thu, 16 Sep 2021 12:04:09 +0000 (08:04 -0400)
committerBenjamin Otte <otte@redhat.com>
Thu, 16 Sep 2021 21:59:37 +0000 (23:59 +0200)
For shadow nodes, we try pretty hard to avoid
rendering shadows, and and we have a shortcut
that just renders text offset, but we can try
harder to do nothing - if the text is offset
by zero, we don't need to draw it at all.

gsk/ngl/gsknglrenderjob.c

index 63da37b64305578500e57153f4fcb10030bb9e29..92d659f976077df8e20b654fed5fd4955b22c6e4 100644 (file)
@@ -3055,21 +3055,24 @@ gsk_ngl_render_job_visit_shadow_node (GskNglRenderJob     *job,
       graphene_rect_t bounds;
       guint16 color[4];
 
-      if (shadow->radius == 0 &&
-          gsk_render_node_get_node_type (shadow_child) == GSK_TEXT_NODE)
-        {
-          gsk_ngl_render_job_offset (job, dx, dy);
-          gsk_ngl_render_job_visit_text_node (job, shadow_child, &shadow->color, TRUE);
-          gsk_ngl_render_job_offset (job, -dx, -dy);
-          continue;
-        }
-
       if (RGBA_IS_CLEAR (&shadow->color))
         continue;
 
       if (node_is_invisible (shadow_child))
         continue;
 
+      if (shadow->radius == 0 &&
+          gsk_render_node_get_node_type (shadow_child) == GSK_TEXT_NODE)
+        {
+          if (dx != 0 || dy != 0)
+            {
+              gsk_ngl_render_job_offset (job, dx, dy);
+              gsk_ngl_render_job_visit_text_node (job, shadow_child, &shadow->color, TRUE);
+              gsk_ngl_render_job_offset (job, -dx, -dy);
+            }
+          continue;
+        }
+
       if (shadow->radius > 0)
         {
           float min_x;